Hallo Andreas,
beim Freezer musst Du noch ein kleines, wichtiges Detail zusätzlich beachten:
Der Freezer klinkt sich in den Interrupt ein und die Interrupt-Aktivierung im 6502 ist ein klein wenig anders als ein "JSR":
Wenn ein IRQ oder NMI auftritt führt der 6502 zuerst noch den aktuellen Befehl fertig aus, der Program Counter steht dann auf der Adresse des nächsten Befehls.
Dann schreibt der 6502 den Program Counter auf den Stack (zuerst HI, dann LO) und danach das Status/Flags Register P.
RTI holt sich dann diese 3 Werte vom Stack und setzt die Register entsprechend - mit diesem Befehl beendet sich auch die Freezer-Software und setzt die normale Programmausführung fort.
Auf den ersten Blick klingt das so wie PLP gefolgt von RTS aber der Unterschied ist, dass beim Interrupt die "richtige" Adresse des nächsten Befehls am Stack steht und nicht "Adresse minus 1" wie bei JSR.
In Deinem Beispiel ist also das $61 an $1F5 das Status-Register - der Freezer zeigt beim "R" Befehl die Status-Bits ausdekodiert an (V=$40, $20 hat keine Bedeutung, C=$01).
In $1F6/$1F7 steht die Adresse des nächsten Befehls ($B8B2) - das zeigt Freezer unter PC an.
$1F8/$1F9 danach sieht dann wie "Adresse minus 1" von einem JSR in $B8C0-$B8C2 aus - $B8C2 heisst ein RTS würde bei $B8C3 weitermachen.
Da das mit "Adresse" und "Adresse minus 1" recht verwirrend sein kann, kannst Du beim Freezer auch einfach folgendermassen vorgehen:
Ignoriere nicht nur den Wert am Stack-Pointer sondern auch die 3 Bytes danach - die Adresse des nächsten Befehls siehst Du ja unter "PC" beim "R" Befehl.
Bei den anderen Adressen am Stack musst Du jeweils 1 hinzuzählen die richtige Adresse zu erhalten bei der RTS weitermacht.
Noch ein Tip: die Adressen am Stack bedeuten nicht unbedingt, dass in Adresse-2 bis Adresse ein JSR steht (auch wenn das oft der Fall sein wird), es kann auch sein, dass das Programm die Adressen mit PHA in den Stack geschrieben hat.
Das ist ein beliebter Trick um Sprungtabellen am 6502 zu implementieren (der 6502 hat leider kein "JMP (adresse,X)" o.ä.) und wird zB auch in der CIO verwendet - deshalb liegen dort in den Tabellen diese seltsamen "Adresse minus 1" Werte.
Kurzum: mit den Daten am Stack bekommst Du nicht (immer) heraus von wo ein Unterprogramm aufgerufen wurde sondern nur bei welcher Adresse ein RTS/RTI weitermachen wird.
so long,
Hias